#ifndef FILE_SYSTEM_STATUS_H
#define FILE_SYSTEM_STATUS_H

// kms_folder.status 和 kms_file.status 状态值定义（位标志）
namespace FileSystemStatus {
    // 状态值定义
    const int PENDING_DOWNLOAD = 0x00000001;      // 0 -> 0x0000 0001: 本地无文件，待下载
    const int SYNCED = 0x00000000;                // 1 -> 0x0000 0000: 本地和服务器，已同步
    const int PENDING_MODIFY = 0x00000010;        // 2 -> 0x0000 0010: 本地有变更，待提交变更
    const int PENDING_ADD = 0x00000100;           // 3 -> 0x0000 0100: 本地有新增，待提交新增
    const int MODIFY_CONFLICT = 0x00100010;       // 4 -> 0x0010 0010: 本地有变更 服务器有变更，变更冲突
    const int PENDING_DELETE = 0x00001000;        // -1 -> 0x0000 1000: 本地有删除，待提交删除
    const int SERVER_DELETE_CONFLICT = 0x10000010; // -2 -> 0x1000 0010: 本地有变更 服务器已删除，服务器删除冲突
    const int LOCAL_DELETE_CONFLICT = 0x00101000;  // -3 -> 0x0010 1000: 本地有删除 服务器已变更，本地删除冲突
    
    // 辅助函数：检查状态是否包含特定标志
    inline bool hasFlag(int status, int flag) {
        return (status & flag) == flag;
    }
    
    // 辅助函数：检查状态是否等于特定值
    inline bool equals(int status, int value) {
        return status == value;
    }
    
    // 辅助函数：检查状态是否为已同步
    inline bool isSynced(int status) {
        return status == SYNCED;
    }
    
    // 辅助函数：检查状态是否为待下载
    inline bool isPendingDownload(int status) {
        return status == PENDING_DOWNLOAD;
    }
    
    // 辅助函数：检查状态是否为待提交变更
    inline bool isPendingModify(int status) {
        return status == PENDING_MODIFY;
    }
    
    // 辅助函数：检查状态是否为待提交新增
    inline bool isPendingAdd(int status) {
        return status == PENDING_ADD;
    }
    
    // 辅助函数：检查状态是否为变更冲突
    inline bool isModifyConflict(int status) {
        return status == MODIFY_CONFLICT;
    }
    
    // 辅助函数：检查状态是否为待提交删除
    inline bool isPendingDelete(int status) {
        return status == PENDING_DELETE;
    }
    
    // 辅助函数：检查状态是否为服务器删除冲突
    inline bool isServerDeleteConflict(int status) {
        return status == SERVER_DELETE_CONFLICT;
    }
    
    // 辅助函数：检查状态是否为本地删除冲突
    inline bool isLocalDeleteConflict(int status) {
        return status == LOCAL_DELETE_CONFLICT;
    }
}

#endif // FILE_SYSTEM_STATUS_H

